
# ROSE Mesh Messenger 🌹

A ESP32 LoRa based mesh network, trying to (eventually) offer metadata protection through simple flooding rules, encrypted message headers, and traffic analysis prevention techniques.

## Supported Hardware:
* Heltec ESP32 Lora V2 Boards connected to a Linux computer via USB


## Status:
* Working arduino code for serial messaging over LoRa
* Working arduino code for serial messaging over ESP Wifi Mesh
* Working MVP Java Client for sending arbitrary string's <= 240 bytes
* Basic message scheduling (send in X seconds, rebroadcast Y times, with interval Z)

## Short-term TODO:
* Mesh messaging over both LoRa and ESP-MESH using one serial port and one ESP32 LoRa board
    * so when you send a message it broadcasts over both networks, increasing mesh connectivity and accessibility. 
    * this would effectively bridge the esp wifi mesh with the lora mesh and allow communication between modalities


## Project Stretch Goals:
The high level idea for this project is to allow the formation of "ROSE Channels" which are essentially a tuple of ESP32 WiFi mesh info, and LoRa channel info. These channels could be shared via QR code and/or shareable links. This info then allows access to the mesh network tuned to those parameters. On this network, ROSE nodes store-and-forward information for all other nodes on the channel. The two main transports in this mesh project are ESP32 Wifi Chips, and LoRa radio. ESP32 Wifi Mesh and LoRa technologies complement each other nicely, first, they come nicely packaged together on ESP32 LoRa boards. Second, when an area is congested enough to jam LoRa communications, there are likely nearby ESP32 LoRa boards to interface with over Wifi. ESP32 also allows a much higher bandwidth, which could facilatate large file transfers when nodes are nearby, which would be near impossible to transmit over LoRa.
* Multi-Packet LoRa Messages
* Advanced Scheduler Behavior
    * Broacast messages at certain time in future
    * Broadcast messages multiple times (i.e 5 times, about every X minutes)
    * Send random packets to fight packet analysis  
* English Message Compression using SMAZ or similar library
    * Not sure how this will work with internationalization, but message compression should be implemented in a plugin-based system so other languages can plug their own compression algos in.

* Encryption built on Bramble, and/or integration with Briar as a transport.
* Android and iOS app
    * iOS app would require Phone -> LoRa ESP32 communication over Bluetooth rather than the current Serial method.

## Non-Goals:
* Mesh Network for reliable and efficient off-grid messaging, machine communication, and IoT-type applications that leak small amounts of information in plaintext headers. For this I reccomend Reticulum as the destination addressing system makes it much more efficient for packet routing. Reticulum also offers "Links" between nodes as an efficient communication stream over the network, and also offers many many more transport devices.
* Public LoRa Mesh Messenger (this may sneak its way into the project if it is wanted for emergency response type situations, however I believe Meshtastic already does this)
* Meshtastic Competitor, meshtastic is a mature project with a large community and has a different primary goal than this project.
* Replacement for current internet messengers
    * Can only semi-reliably handle small messages, no emojiis or images at all (over LoRa at least), network reliant on mesh size and connectivity etc.

